Einleitung Das Unternehmen “213” produziert Ledersitzbezügen (T14), der mehrere Automobilhersteller mit Teilen beliefert. Die Lieferkette besteht aus zwei Instanzen: dem Teilelieferanten und dem Komponentenlieferanten. Die Produktionsfabrik installiert die Komponenten in den jeweiligen Fahrzeugen. Die Analyse bezieht sich einerseits auf die Registrierung von Fahrzeugen, die unsere Sitzbezüge über Postleitzahlen und Fahrzeugtypen installiert haben. Ausgehend von den bereitgestellten Daten, die manuell aus der TUB Cloud heruntergeladen wurden, werden diese im ersten Teil der Aufgabe eingelesen und zur weiteren Verarbeitung abgespeichert. Aufgabenteil 2 enthält die Analyse der Roh-Daten und das Zusammenführen relevanter Datenstränge zu einem finalen Datensatz, der als Ausgangspunkt für die Shiny Applikation dient. Teil 3 enthält die Herstellung von Shinyapp, die einen Balkendiagramm, das die monatliche Registrierung von Fahrzeugen mit unseren Ledersitzbezügen anzeigt. Dazu gehören eine Tabelle und eine Karte, die notwendige Informationen enthält und die die Anzahl der zugelassenen Fahrzeuge mit Sitzbezug in ganz Deutschland zeigt.
Zur Nutzung der R-Funktion muss vorher die notwendigen Pakete geladen werden
if(!require(tidyverse)) {
install.packages("tidyverse")
require(tidyverse)
}
if(!require(stringr)) {
install.packages("stringr")
require(stringr)
}
library(dplyr)
library(magrittr)
Um einen ersten Eindruck zu bekommen, was für Daten zur Verfügung stehen, werden diese zuerst für jeden Ordner aufgelistet. Dann werden die benötigte Daten eingelesen und gespeichert. Danach wird der Aubau von gespeicherte Daten beobachtet. Die gleiche Schritte gelten auch für folgende Ordner bzw. “Fahrzeuge“, “Geodaten“, “Komponenten“, und “Zulassungen“.
Der Ordner “Einzelteil” enthält folgende Dateien:
useBytes = TRUE
Einzelteil_ordner <- list.files(path = "Data/Einzelteil")
Einzelteil_ordner
## [1] "Einzelteil_T01.txt" "Einzelteil_T02.txt" "Einzelteil_T03.txt"
## [4] "Einzelteil_T04.csv" "Einzelteil_T05.csv" "Einzelteil_T06.csv"
## [7] "Einzelteil_T07.txt" "Einzelteil_T08.csv" "Einzelteil_T09.txt"
## [10] "Einzelteil_T10.csv" "Einzelteil_T11.txt" "Einzelteil_T12.csv"
## [13] "Einzelteil_T13.csv" "Einzelteil_T14.csv" "Einzelteil_T15.csv"
## [16] "Einzelteil_T16.txt" "Einzelteil_T17.csv" "Einzelteil_T18.csv"
## [19] "Einzelteil_T19.csv" "Einzelteil_T20.txt" "Einzelteil_T21.csv"
## [22] "Einzelteil_T22.txt" "Einzelteil_T23.csv" "Einzelteil_T24.txt"
## [25] "Einzelteil_T25.csv" "Einzelteil_T26.csv" "Einzelteil_T27.txt"
## [28] "Einzelteil_T30.csv" "Einzelteil_T31.txt" "Einzelteil_T32.csv"
## [31] "Einzelteil_T33.csv" "Einzelteil_T34.txt" "Einzelteil_T35.txt"
## [34] "Einzelteil_T36.txt" "Einzelteil_T37.csv" "Einzelteil_T38.csv"
## [37] "Einzelteil_T39.txt" "Einzelteil_T40.csv"
Einlesen von Teil 14. Benötigt wird nur das Einzelteil T14.(in Aufgabestellung erwähnt)
Einzelteil_T14 <- read_csv2("Data/Einzelteil/Einzelteil_T14.csv", col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## X1_1 = col_double(),
## ID_T14 = col_character(),
## Herstellernummer = col_double(),
## Werksnummer = col_double(),
## Fehlerhaft = col_double(),
## Fehlerhaft_Datum = col_date(format = ""),
## Fehlerhaft_Fahrleistung = col_double(),
## Produktionsdatum_Origin_01011970 = col_double(),
## origin = col_character()
## )
Inhalt/Aufbau anschauen.(mit 2 verschiedenen Verfahren)
str(Einzelteil_T14)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 477052 obs. of 10 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ X1_1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_T14 : chr "14-214-2142-11" "14-213-2132-30" "14-213-2132-6" "14-214-2142-38" ...
## $ Herstellernummer : num 214 213 213 214 213 214 213 214 214 213 ...
## $ Werksnummer : num 2142 2132 2132 2142 2131 ...
## $ Fehlerhaft : num 0 0 0 0 0 0 0 0 1 0 ...
## $ Fehlerhaft_Datum : Date, format: NA NA ...
## $ Fehlerhaft_Fahrleistung : num 0 0 0 0 0 ...
## $ Produktionsdatum_Origin_01011970: num 14190 14190 14190 14191 14190 ...
## $ origin : chr "01-01-1970" "01-01-1970" "01-01-1970" "01-01-1970" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. X1_1 = col_double(),
## .. ID_T14 = col_character(),
## .. Herstellernummer = col_double(),
## .. Werksnummer = col_double(),
## .. Fehlerhaft = col_double(),
## .. Fehlerhaft_Datum = col_date(format = ""),
## .. Fehlerhaft_Fahrleistung = col_double(),
## .. Produktionsdatum_Origin_01011970 = col_double(),
## .. origin = col_character()
## .. )
Auflisten, welche Dateien in dem Ordner gespeichert sind.
Fahrzeug_ordner <- list.files(path = "Data/Fahrzeug")
Fahrzeug_ordner
## [1] "Bestandteile_Fahrzeuge_OEM1_Typ11.csv"
## [2] "Bestandteile_Fahrzeuge_OEM1_Typ12.csv"
## [3] "Bestandteile_Fahrzeuge_OEM2_Typ21.csv"
## [4] "Bestandteile_Fahrzeuge_OEM2_Typ22.csv"
## [5] "Fahrzeuge_OEM1_Typ11.csv"
## [6] "Fahrzeuge_OEM1_Typ12.csv"
## [7] "Fahrzeuge_OEM2_Typ21.csv"
## [8] "Fahrzeuge_OEM2_Typ22.csv"
Pfadangabe
Fahrzeug_pfad <- file.path("Data/Fahrzeug",Fahrzeug_ordner)
Fahrzeugbestandteile einlesen und abspeichern in Variablen. Achtung: read_csv2 führt zum inkorrekten Laden des Inhaltes, wegen anderem Trennzeichen. Stattdessen wird read_csv genutzt, was zum korrekten Einlesen führt.
Bestandteile_Fahrzeuge_OEM1_Typ11 <- read_csv2(Fahrzeug_pfad[1], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## ID_Karosserie = col_character(),
## ID_Schaltung = col_character(),
## ID_Sitze = col_character(),
## ID_Motor = col_character(),
## ID_Fahrzeug = col_character()
## )
Bestandteile_Fahrzeuge_OEM1_Typ12 <- read_csv2(Fahrzeug_pfad[2], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## ID_Karosserie = col_character(),
## ID_Schaltung = col_character(),
## ID_Sitze = col_character(),
## ID_Motor = col_character(),
## ID_Fahrzeug = col_character()
## )
Bestandteile_Fahrzeuge_OEM2_Typ21 <- read_csv2(Fahrzeug_pfad[3], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## ID_Karosserie = col_character(),
## ID_Schaltung = col_character(),
## ID_Sitze = col_character(),
## ID_Motor = col_character(),
## ID_Fahrzeug = col_character()
## )
Bestandteile_Fahrzeuge_OEM2_Typ22 <- read_csv2(Fahrzeug_pfad[4], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## ID_Karosserie = col_character(),
## ID_Schaltung = col_character(),
## ID_Sitze = col_character(),
## ID_Motor = col_character(),
## ID_Fahrzeug = col_character()
## )
Fahrzeuge_OEM1_Typ11 <- read_csv(Fahrzeug_pfad[5], col_names = TRUE)
## Parsed with column specification:
## cols(
## X1 = col_double(),
## X1_1 = col_double(),
## ID_Fahrzeug = col_character(),
## Produktionsdatum = col_date(format = ""),
## Herstellernummer = col_double(),
## Werksnummer = col_double(),
## Fehlerhaft = col_double(),
## Fehlerhaft_Datum = col_date(format = ""),
## Fehlerhaft_Fahrleistung = col_double()
## )
Fahrzeuge_OEM1_Typ12 <- read_csv2(Fahrzeug_pfad[6], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## X1_1 = col_double(),
## ID_Fahrzeug = col_character(),
## Produktionsdatum = col_date(format = ""),
## Herstellernummer = col_double(),
## Werksnummer = col_double(),
## Fehlerhaft = col_double(),
## Fehlerhaft_Datum = col_date(format = ""),
## Fehlerhaft_Fahrleistung = col_double()
## )
Fahrzeuge_OEM2_Typ21 <- read_csv(Fahrzeug_pfad[7], col_names = TRUE)
## Parsed with column specification:
## cols(
## X1 = col_double(),
## X1_1 = col_double(),
## ID_Fahrzeug = col_character(),
## Herstellernummer = col_double(),
## Werksnummer = col_double(),
## Fehlerhaft = col_double(),
## Fehlerhaft_Datum = col_date(format = ""),
## Fehlerhaft_Fahrleistung = col_double(),
## Produktionsdatum_Origin_01011970 = col_double(),
## origin = col_character()
## )
Fahrzeuge_OEM2_Typ22 <- read_csv2(Fahrzeug_pfad[8], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## X1_1 = col_double(),
## ID_Fahrzeug = col_character(),
## Herstellernummer = col_double(),
## Werksnummer = col_double(),
## Fehlerhaft = col_double(),
## Fehlerhaft_Datum = col_date(format = ""),
## Fehlerhaft_Fahrleistung = col_double(),
## Produktionsdatum_Origin_01011970 = col_double(),
## origin = col_character()
## )
Inhalt/Aufbau anschauen.
str(Bestandteile_Fahrzeuge_OEM1_Typ11)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 1977164 obs. of 6 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Karosserie: chr "K4-112-1121-3" "K4-112-1121-4" "K4-112-1121-7" "K4-112-1121-9" ...
## $ ID_Schaltung : chr "K3SG1-105-1051-32" "K3SG1-105-1051-141" "K3SG1-105-1051-106" "K3SG1-105-1051-21" ...
## $ ID_Sitze : chr "K2LE1-109-1091-2" "K2ST1-109-1092-5" "K2ST1-109-1092-57" "K2ST1-109-1092-91" ...
## $ ID_Motor : chr "K1BE1-101-1011-7" "K1BE1-101-1011-12" "K1BE1-101-1011-38" "K1BE1-101-1011-97" ...
## $ ID_Fahrzeug : chr "11-1-11-1" "11-1-11-2" "11-1-11-3" "11-1-11-4" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. ID_Karosserie = col_character(),
## .. ID_Schaltung = col_character(),
## .. ID_Sitze = col_character(),
## .. ID_Motor = col_character(),
## .. ID_Fahrzeug = col_character()
## .. )
str(Bestandteile_Fahrzeuge_OEM1_Typ12)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 408096 obs. of 6 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Karosserie: chr "K5-112-1122-1" "K5-112-1122-11" "K5-112-1122-2" "K5-112-1122-3" ...
## $ ID_Schaltung : chr "K3SG1-105-1051-4" "K3AG1-105-1051-9" "K3AG1-105-1051-23" "K3AG1-106-1061-66" ...
## $ ID_Sitze : chr "K2ST1-109-1092-1" "K2ST1-109-1092-16" "K2ST1-109-1092-21" "K2ST1-109-1092-70" ...
## $ ID_Motor : chr "K1BE1-101-1011-90" "K1BE1-101-1011-2" "K1BE1-101-1011-8" "K1BE1-101-1011-11" ...
## $ ID_Fahrzeug : chr "12-1-12-1" "12-1-12-2" "12-1-12-3" "12-1-12-4" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. ID_Karosserie = col_character(),
## .. ID_Schaltung = col_character(),
## .. ID_Sitze = col_character(),
## .. ID_Motor = col_character(),
## .. ID_Fahrzeug = col_character()
## .. )
str(Bestandteile_Fahrzeuge_OEM2_Typ21)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 512354 obs. of 6 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Karosserie: chr "K6-113-1132-1" "K6-113-1132-2" "K6-113-1132-8" "K6-113-1132-9" ...
## $ ID_Schaltung : chr "K3AG2-108-1082-10" "K3AG2-108-1082-6" "K3AG2-105-1051-13" "K3AG2-108-1082-16" ...
## $ ID_Sitze : chr "K2ST2-109-1092-44" "K2ST2-109-1092-42" "K2ST2-109-1092-74" "K2ST2-109-1092-31" ...
## $ ID_Motor : chr "K1BE2-101-1011-1" "K1DI2-103-1031-1" "K1BE2-101-1011-4" "K1BE2-101-1011-5" ...
## $ ID_Fahrzeug : chr "21-2-21-1" "21-2-21-2" "21-2-21-4" "21-2-21-5" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. ID_Karosserie = col_character(),
## .. ID_Schaltung = col_character(),
## .. ID_Sitze = col_character(),
## .. ID_Motor = col_character(),
## .. ID_Fahrzeug = col_character()
## .. )
str(Bestandteile_Fahrzeuge_OEM2_Typ22)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 306490 obs. of 6 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Karosserie: chr "K7-114-1142-1" "K7-114-1142-2" "K7-114-1142-5" "K7-114-1142-8" ...
## $ ID_Schaltung : chr "K3AG2-108-1082-9" "K3AG2-108-1082-11" "K3AG2-108-1082-14" "K3AG2-108-1082-3" ...
## $ ID_Sitze : chr "K2ST2-109-1092-2" "K2ST2-109-1092-59" "K2ST2-109-1092-4" "K2ST2-109-1092-6" ...
## $ ID_Motor : chr "K1DI2-103-1031-2" "K1BE2-101-1011-2" "K1BE2-101-1011-3" "K1BE2-101-1011-10" ...
## $ ID_Fahrzeug : chr "22-2-21-1" "22-2-21-2" "22-2-21-3" "22-2-21-4" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. ID_Karosserie = col_character(),
## .. ID_Schaltung = col_character(),
## .. ID_Sitze = col_character(),
## .. ID_Motor = col_character(),
## .. ID_Fahrzeug = col_character()
## .. )
str(Fahrzeuge_OEM1_Typ11)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 1977164 obs. of 9 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ X1_1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Fahrzeug : chr "11-1-11-1" "11-1-11-2" "11-1-11-3" "11-1-11-4" ...
## $ Produktionsdatum : Date, format: "2008-11-18" "2008-11-18" ...
## $ Herstellernummer : num 1 1 1 1 1 1 1 1 1 1 ...
## $ Werksnummer : num 11 11 11 11 11 11 11 11 11 11 ...
## $ Fehlerhaft : num 0 0 0 0 0 0 0 0 1 0 ...
## $ Fehlerhaft_Datum : Date, format: NA NA ...
## $ Fehlerhaft_Fahrleistung: num 0 0 0 0 0 ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. X1_1 = col_double(),
## .. ID_Fahrzeug = col_character(),
## .. Produktionsdatum = col_date(format = ""),
## .. Herstellernummer = col_double(),
## .. Werksnummer = col_double(),
## .. Fehlerhaft = col_double(),
## .. Fehlerhaft_Datum = col_date(format = ""),
## .. Fehlerhaft_Fahrleistung = col_double()
## .. )
str(Fahrzeuge_OEM1_Typ12)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 408096 obs. of 9 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ X1_1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Fahrzeug : chr "12-1-12-1" "12-1-12-2" "12-1-12-3" "12-1-12-4" ...
## $ Produktionsdatum : Date, format: "2008-11-19" "2008-11-19" ...
## $ Herstellernummer : num 1 1 1 1 1 1 1 1 1 1 ...
## $ Werksnummer : num 12 12 12 12 12 12 12 12 12 12 ...
## $ Fehlerhaft : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Fehlerhaft_Datum : Date, format: NA NA ...
## $ Fehlerhaft_Fahrleistung: num 0 0 0 0 0 0 0 0 0 0 ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. X1_1 = col_double(),
## .. ID_Fahrzeug = col_character(),
## .. Produktionsdatum = col_date(format = ""),
## .. Herstellernummer = col_double(),
## .. Werksnummer = col_double(),
## .. Fehlerhaft = col_double(),
## .. Fehlerhaft_Datum = col_date(format = ""),
## .. Fehlerhaft_Fahrleistung = col_double()
## .. )
str(Fahrzeuge_OEM2_Typ21)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 512354 obs. of 10 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ X1_1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Fahrzeug : chr "21-2-21-1" "21-2-21-2" "21-2-21-3" "21-2-21-4" ...
## $ Herstellernummer : num 2 2 2 2 2 2 2 2 2 2 ...
## $ Werksnummer : num 21 21 21 21 21 21 21 21 21 21 ...
## $ Fehlerhaft : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Fehlerhaft_Datum : Date, format: NA NA ...
## $ Fehlerhaft_Fahrleistung : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Produktionsdatum_Origin_01011970: num 14202 14202 15353 14203 14203 ...
## $ origin : chr "01-01-1970" "01-01-1970" "01-01-1970" "01-01-1970" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. X1_1 = col_double(),
## .. ID_Fahrzeug = col_character(),
## .. Herstellernummer = col_double(),
## .. Werksnummer = col_double(),
## .. Fehlerhaft = col_double(),
## .. Fehlerhaft_Datum = col_date(format = ""),
## .. Fehlerhaft_Fahrleistung = col_double(),
## .. Produktionsdatum_Origin_01011970 = col_double(),
## .. origin = col_character()
## .. )
str(Fahrzeuge_OEM2_Typ22)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 306490 obs. of 10 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ X1_1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Fahrzeug : chr "22-2-21-1" "22-2-21-2" "22-2-21-3" "22-2-21-4" ...
## $ Herstellernummer : num 2 2 2 2 2 2 2 2 2 2 ...
## $ Werksnummer : num 21 21 21 21 21 21 21 21 21 21 ...
## $ Fehlerhaft : num 1 1 0 0 0 0 0 0 0 0 ...
## $ Fehlerhaft_Datum : Date, format: "2010-03-18" "2010-03-18" ...
## $ Fehlerhaft_Fahrleistung : num 18841 18841 0 0 0 ...
## $ Produktionsdatum_Origin_01011970: num 14202 14202 14202 14203 14203 ...
## $ origin : chr "01-01-1970" "01-01-1970" "01-01-1970" "01-01-1970" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. X1_1 = col_double(),
## .. ID_Fahrzeug = col_character(),
## .. Herstellernummer = col_double(),
## .. Werksnummer = col_double(),
## .. Fehlerhaft = col_double(),
## .. Fehlerhaft_Datum = col_date(format = ""),
## .. Fehlerhaft_Fahrleistung = col_double(),
## .. Produktionsdatum_Origin_01011970 = col_double(),
## .. origin = col_character()
## .. )
Auflisten, welche Dateien in dem Ordner gespeichert sind.
Geodaten_ordner <- list.files(path = "Data/Geodaten")
Geodaten_ordner
## [1] "Geodaten_Gemeinden_v1.2_2017-08-22_TrR.csv"
## [2] "Klimazonen_K?ppen_Geiger.xlsx"
## [3] "OEM_Werke_2017-07-04_TrR.csv"
## [4] "Tier1_Werke_2017-07-11_v1.2_TrR.csv"
## [5] "Tier2_Werke_2017-07-11_v1.2_TrR.csv"
Pfadangabe:
Geodaten_pfad <- file.path("Data/Geodaten",Geodaten_ordner)
Benötigt werden Daten zu den Gemeinden aus Datei 1.
Geodaten_Gemeinden <- read_csv2(Geodaten_pfad[1], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## X = col_double(),
## Postleitzahl = col_double(),
## Gemeinde = col_character(),
## Laengengrad = col_double(),
## Breitengrad = col_double()
## )
Inhalt/Aufbau anschauen.
str(Geodaten_Gemeinden)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 7775 obs. of 6 variables:
## $ X1 : num 1 2 3 4 5 6 7 8 9 10 ...
## $ X : num 1 2 3 4 5 6 7 8 9 10 ...
## $ Postleitzahl: num 1067 1445 1454 1454 1458 ...
## $ Gemeinde : chr "DRESDEN" "RADEBEUL" "RADEBERG" "WACHAU" ...
## $ Laengengrad : num 13.7 13.7 13.9 13.9 13.8 ...
## $ Breitengrad : num 51.1 51.1 51.1 51.2 51.2 ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. X = col_double(),
## .. Postleitzahl = col_double(),
## .. Gemeinde = col_character(),
## .. Laengengrad = col_double(),
## .. Breitengrad = col_double()
## .. )
Auflisten, welche Dateien in dem Ordner gespeichert sind.
Komponente_ordner <- list.files(path = "Data/Komponente")
Komponente_ordner
## [1] "Bestandteile_Komponente_K1BE1.csv"
## [2] "Bestandteile_Komponente_K1BE2.csv"
## [3] "Bestandteile_Komponente_K1DI1.csv"
## [4] "Bestandteile_Komponente_K1DI2.csv"
## [5] "Bestandteile_Komponente_K2LE1.csv"
## [6] "Bestandteile_Komponente_K2LE2.csv"
## [7] "Bestandteile_Komponente_K2ST1.csv"
## [8] "Bestandteile_Komponente_K2ST2.csv"
## [9] "Bestandteile_Komponente_K3AG1.csv"
## [10] "Bestandteile_Komponente_K3AG2.csv"
## [11] "Bestandteile_Komponente_K3SG1.csv"
## [12] "Bestandteile_Komponente_K3SG2.csv"
## [13] "Bestandteile_Komponente_K4.csv"
## [14] "Bestandteile_Komponente_K5.csv"
## [15] "Bestandteile_Komponente_K6.csv"
## [16] "Bestandteile_Komponente_K7.csv"
## [17] "Komponente_K1BE1.csv"
## [18] "Komponente_K1BE2.csv"
## [19] "Komponente_K1DI1.csv"
## [20] "Komponente_K1DI2.txt"
## [21] "Komponente_K2LE1.txt"
## [22] "Komponente_K2LE2.txt"
## [23] "Komponente_K2ST1.txt"
## [24] "Komponente_K2ST2.csv"
## [25] "Komponente_K3AG1.csv"
## [26] "Komponente_K3AG2.txt"
## [27] "Komponente_K3SG1.csv"
## [28] "Komponente_K3SG2.csv"
## [29] "Komponente_K4.csv"
## [30] "Komponente_K5.csv"
## [31] "Komponente_K6.csv"
## [32] "Komponente_K7.txt"
Pfadangabe
Komponente_pfad <- file.path("Data/Komponente",Komponente_ordner)
Nach Beobachten von Spaltenamen, nur K2LE1 enthält T14, deshalb wird nur K2LE1 benötigt.
Bestandteile_Komponente_K2LE1 <- read_csv2(Komponente_pfad[5], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## ID_T11 = col_character(),
## ID_T14 = col_character(),
## ID_T15 = col_character(),
## ID_K2LE1 = col_character()
## )
Inhalt/Aufbau anschauen.
summary(Bestandteile_Komponente_K2LE1)
## X1 ID_T11 ID_T14 ID_T15
## Min. : 1 Length:477052 Length:477052 Length:477052
## 1st Qu.:119264 Class :character Class :character Class :character
## Median :238527 Mode :character Mode :character Mode :character
## Mean :238527
## 3rd Qu.:357789
## Max. :477052
## ID_K2LE1
## Length:477052
## Class :character
## Mode :character
##
##
##
Auflisten, welche Dateien in dem Ordner gespeichert sind.
Zulassungen_ordner <- list.files(path = "Data/Zulassungen")
Zulassungen_ordner
## [1] "Zulassungen_alle_Fahrzeuge.csv"
Pfadangabe
Zulassungen_pfad <- file.path("Data/Zulassungen",Zulassungen_ordner)
Eine Datei, die die Zulassungsdaten aller Fahrzeuge enthält.
Zulassungen_alle_Fahrzeug <- read_csv2(Zulassungen_pfad, col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## X1 = col_double(),
## IDNummer = col_character(),
## Gemeinden = col_character(),
## Zulassung = col_date(format = "")
## )
Inhalt/Aufbau anschauen.
str(Zulassungen_alle_Fahrzeug)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 3204104 obs. of 4 variables:
## $ X1 : num 408097 408098 1 2 3 ...
## $ IDNummer : chr "11-1-11-1" "11-1-11-2" "12-1-12-1" "12-1-12-2" ...
## $ Gemeinden: chr "DRESDEN" "DRESDEN" "LEIPZIG" "LEIPZIG" ...
## $ Zulassung: Date, format: "2009-01-01" "2009-01-01" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. IDNummer = col_character(),
## .. Gemeinden = col_character(),
## .. Zulassung = col_date(format = "")
## .. )
Nach Einlesen und Beobachten von alle Daten werden dann die Korrelationen zwischen den einzelnen Daten herausgefunden bzw. gemeinsame Spaltnamen und dann in einen Datensatz zusammengefügt und gespeichert. Dieser Datensatz dient zur Herstellung von Shinyapp.
Nach Bedarf von Aufgabestellung werden die entsprechende Spalten: “ Herstellernummer_T14“, “ Werksnummer_T14“, “ Fehlerhaft_T14“ ausgewählt. Da das Unternehmen 213 ist, wird die Spalte “Herstellernummer_T14“ mit entsprechende Nummer “213“ gefiltert.
T14_info <- Einzelteil_T14 %>%
select(ID_T14,
Herstellernummer_T14 = Herstellernummer,
Werksnummer_T14 = Werksnummer,
Fehlerhaft_T14 = Fehlerhaft
) %>%
filter(
Herstellernummer_T14 == 213
)
Gibt es NA-Einträge?
any(is.na(T14_info)) # nein
## [1] FALSE
Inhalt/Aufbau anschauen.
summary(T14_info)
## ID_T14 Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14
## Length:190820 Min. :213 Min. :2131 Min. :0.00000
## Class :character 1st Qu.:213 1st Qu.:2131 1st Qu.:0.00000
## Mode :character Median :213 Median :2132 Median :0.00000
## Mean :213 Mean :2132 Mean :0.09997
## 3rd Qu.:213 3rd Qu.:2132 3rd Qu.:0.00000
## Max. :213 Max. :2132 Max. :1.00000
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(Einzelteil_T14)
Datensatz “T14_info” enthält Daten zu allen Sitzbezugen T14, die vom Werk/Unternehmen “213” produziert wurden. Über die Komponentendaten können die Einzelteile den Sitzbezugen zugeordnet werden. Über die Sitzes-ID’s diese wiederum zu den Fahrzeugen und damit den Zulassungen und Geodaten.
In welchen Komponenten sind die Einzelteile verbaut?
Gibt es NA-Einträge?
any(is.na(Bestandteile_Komponente_K2LE1)) # nein
## [1] FALSE
Zusammenfassung des Datensatzes:
summary(Bestandteile_Komponente_K2LE1)
## X1 ID_T11 ID_T14 ID_T15
## Min. : 1 Length:477052 Length:477052 Length:477052
## 1st Qu.:119264 Class :character Class :character Class :character
## Median :238527 Mode :character Mode :character Mode :character
## Mean :238527
## 3rd Qu.:357789
## Max. :477052
## ID_K2LE1
## Length:477052
## Class :character
## Mode :character
##
##
##
Untersuchung der NA-Einträge:
index_ID_T14 <- which(is.na(Bestandteile_Komponente_K2LE1$ID_T14))
index_ID_K2LE1 <- which(is.na(Bestandteile_Komponente_K2LE1$ID_K2LE1))
identical(index_ID_T14, index_ID_K2LE1)
## [1] TRUE
Nur ID_T14 und ID_K2LE1 werden benötigt.
K2LE1_info <- Bestandteile_Komponente_K2LE1 %>%
select(
ID_T14,
ID_Sitze = ID_K2LE1
)
Gibt es NA-Einträge?
any(is.na(K2LE1_info)) # nein
## [1] FALSE
Inhalt/Aufbau anschauen.
summary(K2LE1_info)
## ID_T14 ID_Sitze
## Length:477052 Length:477052
## Class :character Class :character
## Mode :character Mode :character
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(Bestandteile_Komponente_K2LE1)
Dann kommt eine Frage: In welchen Fahrzeugen sind diese Sitzbezugen verbaut?
Zusammenfassung des Datensatzes von Typ 11,12,21 und 22 durch ID_Fahrzeug_Typ11 Typ11:
OEM1_Typ11 <- Fahrzeuge_OEM1_Typ11 %>%
select(
ID_Fahrzeug,
Herstellernummer_Fahrzeug = Herstellernummer,
Werksnummer_Fahrzeug = Werksnummer,
Fehlerhaft_Fahrzeug = Fehlerhaft
) %>%
left_join(
select(Bestandteile_Fahrzeuge_OEM1_Typ11,
ID_Sitze,
ID_Fahrzeug
),
by = "ID_Fahrzeug"
)
any(is.na(OEM1_Typ11)) # nein
summary(OEM1_Typ11)
## [1] FALSE
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:1977164 Min. :1 Min. :11.0
## Class :character 1st Qu.:1 1st Qu.:11.0
## Mode :character Median :1 Median :11.0
## Mean :1 Mean :11.4
## 3rd Qu.:1 3rd Qu.:12.0
## Max. :1 Max. :12.0
## Fehlerhaft_Fahrzeug ID_Sitze
## Min. :0.0000 Length:1977164
## 1st Qu.:0.0000 Class :character
## Median :0.0000 Mode :character
## Mean :0.1002
## 3rd Qu.:0.0000
## Max. :1.0000
Typ12:
OEM1_Typ12 <- Fahrzeuge_OEM1_Typ12 %>%
select(
ID_Fahrzeug,
Herstellernummer_Fahrzeug = Herstellernummer,
Werksnummer_Fahrzeug = Werksnummer,
Fehlerhaft_Fahrzeug = Fehlerhaft
) %>%
left_join(
select(Bestandteile_Fahrzeuge_OEM1_Typ12,
ID_Sitze,
ID_Fahrzeug
),
by = "ID_Fahrzeug"
)
any(is.na(OEM1_Typ12)) # nein
summary(OEM1_Typ12)
## [1] FALSE
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:408096 Min. :1 Min. :12
## Class :character 1st Qu.:1 1st Qu.:12
## Mode :character Median :1 Median :12
## Mean :1 Mean :12
## 3rd Qu.:1 3rd Qu.:12
## Max. :1 Max. :12
## Fehlerhaft_Fahrzeug ID_Sitze
## Min. :0.0000 Length:408096
## 1st Qu.:0.0000 Class :character
## Median :0.0000 Mode :character
## Mean :0.1004
## 3rd Qu.:0.0000
## Max. :1.0000
Typ21:
OEM2_Typ21 <- Fahrzeuge_OEM2_Typ21 %>%
select(
ID_Fahrzeug,
Herstellernummer_Fahrzeug = Herstellernummer,
Werksnummer_Fahrzeug = Werksnummer,
Fehlerhaft_Fahrzeug = Fehlerhaft
) %>%
left_join(
select(Bestandteile_Fahrzeuge_OEM2_Typ21,
ID_Sitze,
ID_Fahrzeug
),
by = "ID_Fahrzeug"
)
any(is.na(OEM2_Typ21)) # nein
summary(OEM2_Typ21)
## [1] FALSE
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:512354 Min. :2 Min. :21
## Class :character 1st Qu.:2 1st Qu.:21
## Mode :character Median :2 Median :21
## Mean :2 Mean :21
## 3rd Qu.:2 3rd Qu.:21
## Max. :2 Max. :21
## Fehlerhaft_Fahrzeug ID_Sitze
## Min. :0.00000 Length:512354
## 1st Qu.:0.00000 Class :character
## Median :0.00000 Mode :character
## Mean :0.09914
## 3rd Qu.:0.00000
## Max. :1.00000
Typ22:
OEM2_Typ22 <- Fahrzeuge_OEM2_Typ22 %>%
select(
ID_Fahrzeug,
Herstellernummer_Fahrzeug = Herstellernummer,
Werksnummer_Fahrzeug = Werksnummer,
Fehlerhaft_Fahrzeug = Fehlerhaft
) %>%
left_join(
select(Bestandteile_Fahrzeuge_OEM2_Typ22,
ID_Sitze,
ID_Fahrzeug
),
by = "ID_Fahrzeug"
)
any(is.na(OEM2_Typ22)) # nein
summary(OEM2_Typ22)
## [1] FALSE
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:306490 Min. :2 Min. :21.0
## Class :character 1st Qu.:2 1st Qu.:22.0
## Mode :character Median :2 Median :22.0
## Mean :2 Mean :21.8
## 3rd Qu.:2 3rd Qu.:22.0
## Max. :2 Max. :22.0
## Fehlerhaft_Fahrzeug ID_Sitze
## Min. :0.00000 Length:306490
## 1st Qu.:0.00000 Class :character
## Median :0.00000 Mode :character
## Mean :0.09872
## 3rd Qu.:0.00000
## Max. :1.00000
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(Bestandteile_Fahrzeuge_OEM1_Typ12)
rm(Fahrzeuge_OEM1_Typ12)
rm(Bestandteile_Fahrzeuge_OEM2_Typ22)
rm(Fahrzeuge_OEM2_Typ22)
rm(Bestandteile_Fahrzeuge_OEM1_Typ11)
rm(Fahrzeuge_OEM1_Typ11)
rm(Bestandteile_Fahrzeuge_OEM2_Typ21)
rm(Fahrzeuge_OEM2_Typ21)
Zusammenfügen in einen Datensatz.
OEM_Alle <- bind_rows(OEM1_Typ11, OEM1_Typ12, OEM2_Typ21, OEM2_Typ22)
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(OEM1_Typ11)
rm(OEM1_Typ12)
rm(OEM2_Typ21)
rm(OEM2_Typ22)
Informationen zu bisherigen Daten hinzufügen Hinzufügen der Informationen von Komponenten an den Einzelteil-Datensatz.
T14_plus_K2LE1 <- T14_info %>%
left_join(
K2LE1_info,
by = "ID_T14"
)
Gibt es NA-Einträge?
any(is.na(T14_plus_K2LE1))
## [1] FALSE
Inhalt/Aufbau anschauen.
summary(T14_plus_K2LE1)
## ID_T14 Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14
## Length:190820 Min. :213 Min. :2131 Min. :0.00000
## Class :character 1st Qu.:213 1st Qu.:2131 1st Qu.:0.00000
## Mode :character Median :213 Median :2132 Median :0.00000
## Mean :213 Mean :2132 Mean :0.09997
## 3rd Qu.:213 3rd Qu.:2132 3rd Qu.:0.00000
## Max. :213 Max. :2132 Max. :1.00000
## ID_Sitze
## Length:190820
## Class :character
## Mode :character
##
##
##
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(T14_info)
rm(K2LE1_info)
Welche Fahrzeuge hat Sitzbezug T14 gebaut?
T14_K2LE1_Fahrzeug_Alle <- OEM_Alle %>%
left_join(
T14_plus_K2LE1,
by = "ID_Sitze"
)
Gibt es NA-Einträge?
any(is.na(T14_K2LE1_Fahrzeug_Alle))
## [1] TRUE
Inhalt/Aufbau anschauen.
summary(T14_K2LE1_Fahrzeug_Alle)
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:3204104 Min. :1.000 Min. :11.00
## Class :character 1st Qu.:1.000 1st Qu.:11.00
## Mode :character Median :1.000 Median :12.00
## Mean :1.256 Mean :14.01
## 3rd Qu.:2.000 3rd Qu.:21.00
## Max. :2.000 Max. :22.00
##
## Fehlerhaft_Fahrzeug ID_Sitze ID_T14
## Min. :0.0000 Length:3204104 Length:3204104
## 1st Qu.:0.0000 Class :character Class :character
## Median :0.0000 Mode :character Mode :character
## Mean :0.0999
## 3rd Qu.:0.0000
## Max. :1.0000
##
## Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14
## Min. :213 Min. :2131 Min. :0.0
## 1st Qu.:213 1st Qu.:2131 1st Qu.:0.0
## Median :213 Median :2132 Median :0.0
## Mean :213 Mean :2132 Mean :0.1
## 3rd Qu.:213 3rd Qu.:2132 3rd Qu.:0.0
## Max. :213 Max. :2132 Max. :1.0
## NA's :3013284 NA's :3013284 NA's :3013284
NA’s entfernen:
T14_K2LE1_Fahrzeug <- na.omit(T14_K2LE1_Fahrzeug_Alle)
Gibt es NA-Einträge?
any(is.na(T14_K2LE1_Fahrzeug))
## [1] FALSE
Inhalt/Aufbau anschauen.
summary(T14_K2LE1_Fahrzeug)
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:190820 Min. :1 Min. :11.0
## Class :character 1st Qu.:1 1st Qu.:11.0
## Mode :character Median :1 Median :12.0
## Mean :1 Mean :11.5
## 3rd Qu.:1 3rd Qu.:12.0
## Max. :1 Max. :12.0
## Fehlerhaft_Fahrzeug ID_Sitze ID_T14
## Min. :0.0000 Length:190820 Length:190820
## 1st Qu.:0.0000 Class :character Class :character
## Median :0.0000 Mode :character Mode :character
## Mean :0.1004
## 3rd Qu.:0.0000
## Max. :1.0000
## Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14
## Min. :213 Min. :2131 Min. :0.00000
## 1st Qu.:213 1st Qu.:2131 1st Qu.:0.00000
## Median :213 Median :2132 Median :0.00000
## Mean :213 Mean :2132 Mean :0.09997
## 3rd Qu.:213 3rd Qu.:2132 3rd Qu.:0.00000
## Max. :213 Max. :2132 Max. :1.00000
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(OEM_Alle)
rm(T14_plus_K2LE1)
rm(T14_K2LE1_Fahrzeug_Alle)
Wo wurden die Fahrzeuge zugelassen?
Datensatz_Zulassungen <- T14_K2LE1_Fahrzeug %>%
left_join(
select(Zulassungen_alle_Fahrzeug,
ID_Fahrzeug = IDNummer,
Zulassung_Datum = Zulassung,
Zulassung_Gemeinde = Gemeinden
),
by = "ID_Fahrzeug"
)
Gibt es NA-Einträge?
any(is.na(Datensatz_Zulassungen))
## [1] FALSE
Inhalt/Aufbau anschauen.
summary(Datensatz_Zulassungen)
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:190820 Min. :1 Min. :11.0
## Class :character 1st Qu.:1 1st Qu.:11.0
## Mode :character Median :1 Median :12.0
## Mean :1 Mean :11.5
## 3rd Qu.:1 3rd Qu.:12.0
## Max. :1 Max. :12.0
## Fehlerhaft_Fahrzeug ID_Sitze ID_T14
## Min. :0.0000 Length:190820 Length:190820
## 1st Qu.:0.0000 Class :character Class :character
## Median :0.0000 Mode :character Mode :character
## Mean :0.1004
## 3rd Qu.:0.0000
## Max. :1.0000
## Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14
## Min. :213 Min. :2131 Min. :0.00000
## 1st Qu.:213 1st Qu.:2131 1st Qu.:0.00000
## Median :213 Median :2132 Median :0.00000
## Mean :213 Mean :2132 Mean :0.09997
## 3rd Qu.:213 3rd Qu.:2132 3rd Qu.:0.00000
## Max. :213 Max. :2132 Max. :1.00000
## Zulassung_Datum Zulassung_Gemeinde
## Min. :2009-01-01 Length:190820
## 1st Qu.:2011-02-21 Class :character
## Median :2013-02-20 Mode :character
## Mean :2013-01-30
## 3rd Qu.:2015-02-20
## Max. :2016-12-27
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(T14_K2LE1_Fahrzeug)
rm(Zulassungen_alle_Fahrzeug)
Geodaten für die Zulassungs-Gemeinden hinzufügen.
Datensatz_Ausfuehrlich <- Datensatz_Zulassungen %>%
left_join(
select(Geodaten_Gemeinden,
Zulassung_Gemeinde = Gemeinde,
Postleitzahl,
Laengengrad,
Breitengrad),
by = "Zulassung_Gemeinde"
)
Gibt es NA-Einträge?
any(is.na(Datensatz_Ausfuehrlich)) # ja
## [1] TRUE
Zusammenfassung des Datensatzes:
summary(Datensatz_Ausfuehrlich)
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:190820 Min. :1 Min. :11.0
## Class :character 1st Qu.:1 1st Qu.:11.0
## Mode :character Median :1 Median :12.0
## Mean :1 Mean :11.5
## 3rd Qu.:1 3rd Qu.:12.0
## Max. :1 Max. :12.0
##
## Fehlerhaft_Fahrzeug ID_Sitze ID_T14
## Min. :0.0000 Length:190820 Length:190820
## 1st Qu.:0.0000 Class :character Class :character
## Median :0.0000 Mode :character Mode :character
## Mean :0.1004
## 3rd Qu.:0.0000
## Max. :1.0000
##
## Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14
## Min. :213 Min. :2131 Min. :0.00000
## 1st Qu.:213 1st Qu.:2131 1st Qu.:0.00000
## Median :213 Median :2132 Median :0.00000
## Mean :213 Mean :2132 Mean :0.09997
## 3rd Qu.:213 3rd Qu.:2132 3rd Qu.:0.00000
## Max. :213 Max. :2132 Max. :1.00000
##
## Zulassung_Datum Zulassung_Gemeinde Postleitzahl Laengengrad
## Min. :2009-01-01 Length:190820 Min. : 1067 Min. : 5.902
## 1st Qu.:2011-02-21 Class :character 1st Qu.:26506 1st Qu.: 8.042
## Median :2013-02-20 Mode :character Median :50667 Median : 9.895
## Mean :2013-01-30 Mean :50834 Mean : 9.991
## 3rd Qu.:2015-02-20 3rd Qu.:78554 3rd Qu.:11.857
## Max. :2016-12-27 Max. :99998 Max. :14.988
## NA's :15 NA's :15
## Breitengrad
## Min. :47.45
## 1st Qu.:49.30
## Median :50.85
## Mean :50.63
## 3rd Qu.:51.64
## Max. :54.87
## NA's :15
NA’s entfernen
Datensatz_Ausfuehrlich_sauber <- na.omit(Datensatz_Ausfuehrlich)
Gibt es NA-Einträge?
any(is.na(Datensatz_Ausfuehrlich_sauber))
## [1] FALSE
Zusammenfassung des Datensatzes:
summary(Datensatz_Ausfuehrlich_sauber)
## ID_Fahrzeug Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
## Length:190805 Min. :1 Min. :11.0
## Class :character 1st Qu.:1 1st Qu.:11.0
## Mode :character Median :1 Median :12.0
## Mean :1 Mean :11.5
## 3rd Qu.:1 3rd Qu.:12.0
## Max. :1 Max. :12.0
## Fehlerhaft_Fahrzeug ID_Sitze ID_T14
## Min. :0.0000 Length:190805 Length:190805
## 1st Qu.:0.0000 Class :character Class :character
## Median :0.0000 Mode :character Mode :character
## Mean :0.1004
## 3rd Qu.:0.0000
## Max. :1.0000
## Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14
## Min. :213 Min. :2131 Min. :0.00000
## 1st Qu.:213 1st Qu.:2131 1st Qu.:0.00000
## Median :213 Median :2132 Median :0.00000
## Mean :213 Mean :2132 Mean :0.09998
## 3rd Qu.:213 3rd Qu.:2132 3rd Qu.:0.00000
## Max. :213 Max. :2132 Max. :1.00000
## Zulassung_Datum Zulassung_Gemeinde Postleitzahl Laengengrad
## Min. :2009-01-01 Length:190805 Min. : 1067 Min. : 5.902
## 1st Qu.:2011-02-21 Class :character 1st Qu.:26506 1st Qu.: 8.042
## Median :2013-02-20 Mode :character Median :50667 Median : 9.895
## Mean :2013-01-30 Mean :50834 Mean : 9.991
## 3rd Qu.:2015-02-20 3rd Qu.:78554 3rd Qu.:11.857
## Max. :2016-12-27 Max. :99998 Max. :14.988
## Breitengrad
## Min. :47.45
## 1st Qu.:49.30
## Median :50.85
## Mean :50.63
## 3rd Qu.:51.64
## Max. :54.87
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(Geodaten_Gemeinden)
rm(Datensatz_Zulassungen)
rm(Datensatz_Ausfuehrlich)
Datensatz_Analyse <- Datensatz_Ausfuehrlich_sauber %>%
select(
ID_T14,
ID_Sitze,
ID_Fahrzeug,
Zulassung_Datum,
Zulassung_Gemeinde,
Werksnummer_Fahrzeug,
Postleitzahl,
Laengengrad,
Breitengrad
)
Zusammenfassung des Datensatzes:
summary(Datensatz_Analyse)
## ID_T14 ID_Sitze ID_Fahrzeug
## Length:190805 Length:190805 Length:190805
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
## Zulassung_Datum Zulassung_Gemeinde Werksnummer_Fahrzeug
## Min. :2009-01-01 Length:190805 Min. :11.0
## 1st Qu.:2011-02-21 Class :character 1st Qu.:11.0
## Median :2013-02-20 Mode :character Median :12.0
## Mean :2013-01-30 Mean :11.5
## 3rd Qu.:2015-02-20 3rd Qu.:12.0
## Max. :2016-12-27 Max. :12.0
## Postleitzahl Laengengrad Breitengrad
## Min. : 1067 Min. : 5.902 Min. :47.45
## 1st Qu.:26506 1st Qu.: 8.042 1st Qu.:49.30
## Median :50667 Median : 9.895 Median :50.85
## Mean :50834 Mean : 9.991 Mean :50.63
## 3rd Qu.:78554 3rd Qu.:11.857 3rd Qu.:51.64
## Max. :99998 Max. :14.988 Max. :54.87
Datensatz speichern im RData-Format.
save(Datensatz_Analyse, file = "Finaler_Datensatz_06.RData")
Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.
rm(Datensatz_Ausfuehrlich_sauber)
Innerhalb der Shiny-App soll eine Übersicht entstehen über die betroffenen Fahrzeuge. Wie es in der Einleitung erwähnt wird, werden die folgen Teilen dargestellt:
Details sehen Screenshot unten:
Notwendigen Pakete laden.
if(!require(tidyverse)) {
install.packages("tidyverse")
require(tidyverse)
}
if(!require(lubridate)) {
install.packages("lubridate")
require(lubridate)
}
if(!require(shiny)) {
install.packages("shiny")
require(shiny)
}
if(!require(shinyjs)) {
install.packages("shinyjs")
require(shinyjs)
}
if(!require(plotly)) {
install.packages("plotly")
require(plotly)
}
if(!require(leaflet)) {
install.packages("leaflet")
require(leaflet)
}
if(!require(leaflet.extras)) {
install.packages("leaflet.extras")
require(leaflet.extras)
}
if(!require(ggsci)) {
install.packages("ggsci")
require(ggsci)
}
Einlesen des zurvor erstellten Datensatzes aus dem Analyseprozess.
Datensatz <- get(load("Finaler_Datensatz_06.RData"))
Begrenzung für Slider
erstes <- min(Datensatz$Zulassung_Datum)
letztes <- max(Datensatz$Zulassung_Datum)
Funktion zur Definition von Farben für den entsprechenden Autotyp. Diese werden in der Leaflet-Karte als Markerfarben genutzt.
getColor <- 'blue'
Auswahl eines Icons als Marker auf der Karte
icons <- awesomeIcons(
icon = 'ion-android-car',
iconColor = 'white',
library = 'ion',
markerColor = getColor
)
Als nächstes wird der ausführliche Code der APP angezeigt. Nachdem der Code angezeigt wird, werden unseres Ergebnis diskutiert. Das APP besteht aus 2 große Teile: * ui.R: enthält alles, das zur Benutzeroberfläche zählt * server.R: bestimmt, welche Daten für die verschiedenen Teile der App verwendet werden.
User Interface: Benutzeroberfläche, Input. Die Funktion fluidRow ermöglicht eine benutzerdefinierte Struktur.
ui <- fluidPage(
useShinyjs(),
fluidRow(
Die App-Oberfläche wird in 12 Spalten eingeteilt. Im Header steht auf der linken Seite die Überschrift für die App, gegenüber auf der rechten Seite die Informationen zum Hintergrund dieser Abgabe. Der erste Absatz wird also in zwei Bereiche eingeteilt, der je 6 Spaltenbreiten einnimmt. Über Funktion align werden die Überschriften an den rechten Rand angordnet.
column(6,
# Titel
titlePanel(
br(),
title = "CASE STUDY 06"
),
h4("Identify popularity of leather cover T14 in Germany"),
h5("Seat cover mancufacturer 213")
),
column(6,
h6("TU Berlin", align = "right"),
h6("Institut für Werkzeugmaschinen und Fabrikbetrieb", align = "right"),
h6("Introduction to Engineering Data Analytics with R", align = "right"),
h6("SS19, 22.08.2019", align = "right")
)
),
#eine leere Zeile einfügen, um die Übersichtlichkeit zu verbessern.
br(),
Der nächste Absatz wird eingeteilt mit 4 Spaltenbreiten für die einstellbaren Variablen auf der linken Seite und der dazugehörige Diagramm auf der rechten Seite. Über wellpanel() wird eine Tabelle erstellt in der alle auswählbaren Größen aufgelistet werden. Der Slider ermöglicht die Einstellung des Zeitraums der Zulassungen in der ausgewählten Gemeinde. Über den Action-Button “update” muss die neue Auswahl bestätigt werden, damit sich die Ausgaben anpassen.
fluidRow(
# Überschrift für Graph
h3(" Monthly registration of vehicles ", align = "center"),
column(4,
br(),
br(),
br(),
#Seitenleiste Datenauswahl
wellPanel(
#Gemeinde/n auswählbar, in der/denen Fahrzeuge zugelassen wurden
selectizeInput(
inputId = "vehicle",
label = "Vehicle type",
choices = sort(unique(Datensatz$Werksnummer_Fahrzeug))
),
#Zeitraum auswählen des Zulassungsverlaufs in gewählter/n Gemeinde/n
sliderInput(
inputId = "zeitraum",
label = "Date in month",
min = as.Date(erstes),
max = as.Date(letztes),
value = c(as.Date(erstes), as.Date(letztes)),
timeFormat = "%m %Y"
),
#Update Button zum Aktualisieren des Main Panel nach Ändern der Datenauswahl
actionButton(
inputId = "update",
label = "update"
)
)
),
In der rechten Fensterhälfte des zweiten Absatzes mit einer Breite von 8 Spalten. Die Ausgabe enthält die Diagramm, die die monatliche Registrierung von Fahrzeugen zeigt.
#Hauptfenster Output
column(8,
#Graph zeitlicher Zulassungsverlauf für gewählte Gemeinde
plotlyOutput(
outputId = "graph"
)
),
br(),
Im nächsten Absatz wird über die gesamte Fenstergröße der Datensatz dargestellt auf den die Diagramm und die Heatmap basieren. Hierbei ist auszuwählen zwischen zwei Fenstern/Tabs.
column(12,
tabsetPanel(
#zugehörige Tabelle mit Daten zum Graph
tabPanel("Data Graph",
dataTableOutput(
outputId = "tabelle"
)
),
# gesamter Datensatz
tabPanel("Data Total",
dataTableOutput(
outputId = "daten_gesamt"
)
)
)
),
br(),
br(),
Als letztes wird die Heatmap gezeigt, die am Ende der App bildet.
# Karte
column(12,
# Überschrift für Karte
br(),
h3("Regional distribution of vehicle registrations", align = "center"),
br(),
# Kartengröße an Fenstergröße anpassen.
tags$style(type = "text/css", "#karte {height: calc(100vh - 120px) !important;}"),
title = "Map",
leafletOutput(
outputId = "karte"),
br(),
hr()
)
)
)
Der server-Teil der App bestimmt, welche Daten für die verschiedenen Teile der App verwendet werden. Reaktive Zugriffe auf die variablen Datenmengen werden durch Veränderung der Input-Einstellungen realisiert. Beschreibungen sind schon vorher gezeigt und genaue Befehle werden dann mit # angemerkt.
Output mit Input von ui
server <- function(input, output, session) {
# Datenaufruf nach Aktualisierung
daten_nach_input <- reactive({
# Aktualisierungs-Button
input$update
isolate({
# Filtern der Daten nach eingegebener Fahrzeugtype.
daten <- filter(Datensatz,
Werksnummer_Fahrzeug == input$vehicle)
})
})
# Datensatz für Heatmap variabel durch Drop-Down Fenster.
daten_filter <- reactive({
# Update, wenn Aktualisieren-Button gedrückt wird.
input$update
isolate({
# Auswahl des Fahrzeugtyps durch Drop-Down Fenster.
daten <- filter(Datensatz,
Werksnummer_Fahrzeug == input$vehicle)
})
})
# Statischer Teil der Karte, wird nur einmal geladen.
output$karte <- renderLeaflet({
leaflet(Datensatz) %>%
addProviderTiles("Stamen.TonerLite",
group = "Simpel (Standard)",
options = providerTileOptions(minZoom = 4, maxZoom = 13)) %>%
addTiles(group = "Open Street Map") %>%
# Konzentration des Zooms auf die Koordinaten im Datensatz.
fitBounds(
~min(Laengengrad)-1,
~min(Breitengrad)-1,
~max(Laengengrad)+1,
~max(Breitengrad)+1)
})
#Output1 Graph: # zeitlicher Zulassungsverlauf der Fahrzeuge
output$graph <- renderPlotly({
# Berechnung der Zulassungen pro Monat.
Datensatz %>% mutate(Zulassung_Datum = ymd(Zulassung_Datum),
Year = Zulassung_Datum%>%year(),
Month = Zulassung_Datum %>% month()) %>%
filter(Zulassung_Datum >= input$zeitraum[1]&Zulassung_Datum<=input$zeitraum[2]) %>%
group_by(Year,Month,Werksnummer_Fahrzeug) %>%summarise(sum_number=n()) %>%
# # Output Graph Zulassungen pro Monat.
ggplot(aes(x =factor(Month),y=sum_number,
fill=factor(Werksnummer_Fahrzeug))) +
geom_bar(stat = "identity") +facet_grid(Year~.)+
# Achsenbeschriftung.
labs(x="Month",
y="Number of vehicle registrations per month",
fill="Vehicle type") +
theme(axis.text = element_text(size=6),
axis.title = element_text(size=8))+
scale_fill_d3()
})
#Output2 Tabelle: Daten zum Graph
output$tabelle <- renderDataTable(
# Aktualisierte Daten.
select(
daten_nach_input(),
1:6),
# Veränderung des default wie viele Einträge der Tabelle angezeigt werden.
options = list(
pageLength = 5,
lengthMenu = c(5, 10, 15, -1)
)
)
#Output3 Tabelle: Datensatz gesamt.
output$daten_gesamt <- renderDataTable(
Datensatz[order(Datensatz$Zulassung_Gemeinde),],
options = list(
pageLength = 5,
lengthMenu = c(5, 10, 15, -1)
)
)
# Output4 Heatmap: zum gesamten Datensatz
observe({
leafletProxy("karte", data = daten_filter()) %>%
# Löschen von vorherigen Ausgaben, wenn Daten verändert wurden.
clearShapes() %>%
clearPopups() %>%
clearMarkers() %>%
clearMarkerClusters %>%
clearHeatmap %>%
# Heatmap wird in ein extra Layer auf statische Karte gelegt mit im Datensatz vorhandenen Koordinaten.
addHeatmap(lng = ~Laengengrad,
lat = ~Breitengrad,
max = .6,
group = "Heatmap",
blur = 60) %>%
# Markereinstellungen.
addAwesomeMarkers(
lng = ~Laengengrad,
lat = ~Breitengrad,
icon = icons,
# Popup zeigt Zulassungsort, Postleitzahl und Fahrzeug_ID.
popup = ~paste(
"<b>Zulassungsort: </b>", Zulassung_Gemeinde, "<br>",
"<b>Postleitzahl: </b>", Postleitzahl, "<br>",
"<b>Fahrzeug: </b>", ID_Fahrzeug, "<br>"),
# Für eine bessere Übersicht, werden die Marker in Cluster zusammengefasst.
clusterOptions = markerClusterOptions(),
group = "Detailliert"
) %>%
addLayersControl(
baseGroups = c("Simpel (Standard)", "Open Street Map"),
overlayGroups = c("Detailliert", "Heatmap"),
position = "bottomleft",
options = layersControlOptions(collapsed = TRUE)
) %>%
# Heatmap wird beim Start nicht angezeigt.
hideGroup(group = "Heatmap")
})
}
Am Ende wird das App über shinyApp() und die Übergabe beider Variablen aufgerufen.
#App aufrufen
shinyApp(ui = ui, server = server)
Aus die Balkendiagramm ist es deutlich zu sehen, wie die Ledersitzbezüge T14 monatlich verkauft bzw. registriert werden. Die Analyse wird in 2 Richtungen durchgeführt: In der Richtung Zeit, In der Richtung Fahzeugtyp. 1. In der Richtung Zeit: Es gibt keine bestimmte Regel, aber am Anfang eines Jahrs, inder Mittel eines Jahrs und am Ende eines Jahrs erscheinen wenigere Verkäufe von Sitzbezügen im vergleich zu anderen Monaten. 2. In der Richtung Fahrzeugtyp: Die Sitzbezüge auf Fahrzeugtyp 12 werden normaleweise mehr als die auf Fahrzeugtyp 11 verkauft.
Schließlich ist es auch der wichtigste Teil. Als nächstes wird die Verteilung von Sitzbezüge T14 in Deutschland analysiert und durch die Analyse ist es klar zu verstehen, wo sich T14 am besten verkauft. Die Analyse wird in 3 Teilen durchgeführt bzw. auf Fahrzeugtyp 11, auf Fahrzeugtyp 12 und Vergleichen der Sitzbezüge auf verschiedenen Fahzeugtypen in gleicher Gemeinde.
Wichtig: Die Vergleichen von Gemeinden werden nur mit gleichem Abstand in Map durchgeführt!
Auf den ersten Abstand ist es zu erfahren, dass die Sitzbezüge auf Fahrzeugtyp 11 in Westdeutschland mehr beliebig sind. Aber die Zahlen in der Nähe von Leizig, Stuttgart und Munich auch hoch sind. Deshalb sind diese 3 Gemeinde auch notwendig zu prüfen.
Auf den zweiten Abstand werden in oberem Bild rot markierte Gemeinde eingefallen.
Am Ende ist es mit Hilfe von Heatmap deutlich zu sehen, dass die Sitzbezüge auf Fahrzeugtyp 11 in diesen zwei Städten Köln und Essen am beliebtesten sind.
Auf den ersten Abstand wird es zu eingefallen, dass die Sitzbezüge sowohl in Westdeutschland als auch in Süddeutschland beliebig sind.
Auf den zweiten Abstand ist es eingefallen, dass die Sitzbezüge in den Städten Dortmund, Köln und Munich mehr beliebig sind. Und diese Städte werden in nächstem Schritt geprüft.
Mit Hilfe von Heatmap ist es auf dritten Abstand deutlich zu erfahren, dass die Sitzbezüge T14 auf das Fahrzeugtyp 12 in Köln am beliebtesten sind.
Die Ledersitzbezüge T14, die sowohl für Fahrzeugtyp 11 als auch für Fahrzeugtyp 12 benutzt werden, sind in Stadt Köln am beliebtesten.